安卓内核逆向

您所在的位置:网站首页 安卓 刷内核 安卓内核逆向

安卓内核逆向

2024-07-14 23:17| 来源: 网络整理| 查看: 265

安卓内核逆向 26 May 2023

参考文章:https://bbs.kanxue.com/thread-272958.htm https://github.com/xiaokanghub/Android-Kenerl-boot.img

前置

本次逆向的内核为运行在Xiaomi Redmi Note 11T Pro的Miui 14,内核版本为:5.10.101

提取boot.img

tip:关于A/B boot分区,咨询了网友,官方默认A分区为主

# 提取A分区的boot.img dd if=$(readlink /dev/block/by-name/boot_a) of=/sdcard/boot.img

经验证A分区提取出来的boot.img与之前刷入的boot.img相同

解包 boot.img

使用magiskboot解包boot.img,github下载一份别人编译好的magiskboot

./magiskboot unpack boot.img

可得到kernel、ramdisk.cpio文件,其中kernel为内核vmlinux镜像,拖到IDA逆就完事了

解析内核符号

1.提取内核符号表

# 关闭内核指针限制(不关闭只有符号看不见地址) echo 0 > /proc/sys/kernel/kptr_restrict # save kallsyms cat /proc/kallsyms > /sdcard/kallsyms.txt # 其中 ffffffe054200000 T _text 为内核加载基址

2.在IDA中匹配符号

import re pattern = re.compile('(\w+) (\w) (.+)\n',re.M) fp = open("C:/kallsyms.txt","r") while True: line = fp.readline() if not line: break matchs = pattern.match(line) addr = int(matchs.group(1),16) name = matchs.group(3) if('$' in name): continue print(addr,matchs.group(2),name) if not idaapi.add_entry(addr,addr,name,0): print('Naming failed',hex(addr),matchs.group(2),name) if 't' == matchs.group(2) or 'T' == matchs.group(2): ida_ua.create_insn(addr) 重打包boot.img ./magiskboot repack boot.img


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3